#include<iostream>
using namespace std;

const int N = 1010;
int dp[N][N], a[N], s[N]; // f[i][j]表示从i到j的最大得分
int n;
int solve();

int main()
{
   cin >> n;
   for (int i = 1; i <= n; i++)
   {
       cin >> a[i];
       //类似于数学里的数列求前n项和，s是前缀和数组,预处理
       //在这里求出前缀和可以降低复杂度
       s[i] = s[i - 1] + a[i];
   }
   cout << solve() << endl;
   return 0;
}
int solve()
{
   //枚举区间长度
   for (int len = 1; len <= n; len++)
   {
      for (int i = 1; i + len - 1 <= n; i++)
      {
         int l = i, r = i + len - 1;
         //用两人拿的总和(区域长度总和)减去最小的，就剩下最大的
         dp[l][r] = s[r] - s[l - 1] - min(dp[l + 1][r], dp[l][r - 1]);
      }
   }
   return dp[1][n];
}
